{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c6a98b2c-2729-43e9-9066-d01f48ed96e0",
   "metadata": {},
   "source": [
    "Chapter 03\n",
    "\n",
    "# 用热图可视化矩阵乘法第四视角\n",
    "《线性代数》 | 鸢尾花书：数学不难"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e8ec2c7-8379-4bf6-a9a8-ffd5f7930a48",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "ece0de0f-22f5-4e81-b7a1-52ba9c655323",
   "metadata": {},
   "source": [
    "## 初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e7785bcb-527f-4d48-bfd6-f96aa060144c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np  # 导入数值计算库\n",
    "import seaborn as sns  # 导入数据可视化库\n",
    "from matplotlib import pyplot as plt  # 导入绘图库"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a508235-6982-4cb3-98ea-5cb1cdf7dd41",
   "metadata": {},
   "source": [
    "## 创建矩阵A和B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d54c24ce-a341-4258-bb2e-495012d34e83",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.2951021 ,  0.01429938,  0.05668276,  0.79257041,  0.39998238,\n",
       "         0.4285942 ,  0.43467676, -0.55436108, -0.64969095, -0.08631702,\n",
       "         0.85747686, -0.98022823],\n",
       "       [-0.82015561,  0.70040054, -0.02875788,  0.75367118, -0.38533212,\n",
       "        -0.22406891,  0.16289149, -0.77262564,  0.53576037, -0.37486792,\n",
       "         0.29202092, -0.93460217],\n",
       "       [-0.66720885, -0.13939394, -0.54438706,  0.93261493,  0.80987882,\n",
       "         0.73132583, -0.93567444,  0.5989955 ,  0.81231102,  0.40786666,\n",
       "        -0.54057511, -0.1771288 ],\n",
       "       [ 0.95728792, -0.34190808,  0.19105814,  0.07169268, -0.07780809,\n",
       "        -0.54840068,  0.84110593,  0.22164568, -0.55981616, -0.9214308 ,\n",
       "         0.09577916, -0.81962657],\n",
       "       [ 0.63613656,  0.36713916,  0.87165598, -0.82017787, -0.97328478,\n",
       "        -0.56777511, -0.23258517,  0.47506735, -0.48989147, -0.48920298,\n",
       "        -0.52213956, -0.78695798]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.seed(88)  # 保证每次运行生成相同的随机数\n",
    "A = np.random.uniform(-1, 1, (5, 12))\n",
    "# 生成一个 5×12 的随机整数矩阵（数值范围 0~10）\n",
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c67d8ec4-5bb6-4d83-9e05-d35990ea25c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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9PR07d6921JVeKisrJQkXXvttZZLLq+mpkarV69WdXW1UlNTbefUk52drVGjRmnEiBG2U/w6ePCgEhIS1LVrV40fP16HDx+2neRjw4YNSklJ0X333af27durX79+euWVV2xn+XX+/Hm9/vrryszMlMvlsp3jY9CgQXr33Xd14MABSdJf//pX7dq1S7/4xS8sl/3gwoULqqmpUYsWLXyOR0dHa9euXZaq/Dty5IhOnDjh8/7H7XZr6NChvP+RFGk7oDF98803qqmpUYcOHXyOd+jQQSdOnLBU1fQ5jqPc3FwNGjRIvXr1sp3jo7S0VKmpqTp37pyuueYavfnmm7r55pttZ/lYvXq19u7da/VzzQ25/fbbtXLlSt100036+9//rqeeekppaWkqKytT27ZtbedJkg4fPqwlS5YoNzdXTzzxhD7++GP97ne/k9vt1oMPPmg7r57169fr1KlTeuihh2yn1DNjxgxVVlYqKSlJERERqqmp0bx58zRhwgTbaXVatWql1NRU/fGPf1RycrI6dOigN954Qx999JF69OhhO6+eS+9jLvf+5+jRozaSQkpYjY1L/u9HEY7jhNxHFk3JY489pk8++SQkP5pITExUSUmJTp06pbVr12ry5MnasWNHyAyO48ePa+rUqdqyZUu9j9BCSUZGRt23e/furdTUVHXv3l0rVqxQbm6uxbIf1NbWKiUlRfPnz5ck9evXT2VlZVqyZElIjo1XX31VGRkZSkhIsJ1Sz5o1a/T6669r1apV6tmzp0pKSpSTk6OEhARNnjzZdl6d1157TZmZmbr++usVERGh/v37a+LEidq7d6/tNL94/3N5YTU22rVrp4iIiHpXMSoqKuqtTVyZ3/72t9qwYYN27typjh072s6pp3nz5rrxxhslSSkpKSoqKtILL7ygl19+2XLZRcXFxaqoqNCAAQPqjtXU1Gjnzp1atGiRvF6vIiIiLBZeXkxMjHr37q2DBw/aTqkTHx9fb0QmJydr7dq1lor8O3r0qLZu3ap169bZTrms6dOna+bMmRo/frykiwPz6NGjys/PD6mx0b17d+3YsUPV1dWqqqpSfHy8xo0bp65du9pOq+fSq7dOnDih+Pj4uuO8/7korJ6z0bx5cw0YMKDuGeCXFBYWKi0tzVJV0+Q4jh577DGtW7dO27ZtC8m/3JfjOI68Xq/tjDrDhw9XaWmpSkpK6m4pKSm6//77VVJSEpJDQ5K8Xq/Ky8t9HjRtGzhwYL2XXx84cEBdunSxVOTf8uXL1b59e40aNcp2ymWdOXNGzZr5PvxHRESE3EtfL4mJiVF8fLy+/fZbbd68WXfddZftpHq6du2quLg4n/c/58+f144dO3j/ozC7siFJubm5euCBB5SSkqLU1FQtXbpUx44dU1ZWlu20Ot99950OHTpU9/0jR46opKRE1157rTp37myx7AfZ2dlatWqV3nrrLbVq1arualHr1q0VHR1tue6iJ554QhkZGerUqZNOnz6t1atX67333tOmTZtsp9Vp1apVvee5xMTEqG3btiH1/Jdp06Zp9OjR6ty5syoqKvTUU0+pqqoqpD7Kffzxx5WWlqb58+dr7Nix+vjjj7V06VItXbrUdpqP2tpaLV++XJMnT1ZkZGg+xI4ePVrz5s1T586d1bNnT+3bt08LFixQZmam7TQfmzdvluM4SkxM1KFDhzR9+nQlJibq4YcfttLT0GN3Tk6O5s+frx49eqhHjx6aP3++WrZsqYkTJ4ZU58mTJ3Xs2DF9+eWXklQ34uPi4sx9fR3jr3exYPHixU6XLl2c5s2bO/379w+5l2tu377dkVTvNnnyZNtpdS7XJ8lZvny57bQ6mZmZdf+fr7vuOmf48OHOli1bbGc1KBRf+jpu3DgnPj7eiYqKchISEpx77rnHKSsrs51Vz9tvv+306tXLcbvdTlJSkrN06VLbSfVs3rzZkeTs37/fdopfVVVVztSpU53OnTs7LVq0cLp16+bMmjXL8Xq9ttN8rFmzxunWrZvTvHlzJy4uzsnOznZOnTplraehx+7a2lonLy/PiYuLc9xutzNkyBCntLQ05DqXL19+2fvz8vKMNfFPzAMAAKPC6jkbAAAg9DA2AACAUYwNAABgFGMDAAAYxdgAAABGMTYAAIBRjA0AAGAUYwMAABjF2AAAAEYxNgAAgFGMDQAAYBRjAwAAGPW/Q2ATLlF190AAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(A, cmap = 'RdYlBu_r', square = True, \n",
    "            cbar = False,\n",
    "            linecolor = 'w', linewidths = 0.25)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f5f12b9b-36f5-49a6-a1d8-4bdf9b956704",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.63544881,  0.78586467, -0.8805252 , -0.66807296, -0.92597501,\n",
       "         0.40170689,  0.99329933, -0.77794562],\n",
       "       [ 0.44911418, -0.32517321, -0.6463447 ,  0.88373575,  0.95186898,\n",
       "         0.52953172, -0.19490997, -0.16397646],\n",
       "       [ 0.28995495, -0.92863205, -0.73063709,  0.26954949,  0.86110223,\n",
       "         0.90084512,  0.12667943, -0.57593776],\n",
       "       [ 0.0818441 , -0.65333352, -0.70500183,  0.45299007, -0.58046341,\n",
       "        -0.95581985,  0.25193687,  0.90186504],\n",
       "       [ 0.78719916, -0.26147268,  0.85737295,  0.02976143,  0.88742041,\n",
       "         0.13894219, -0.97340213, -0.32344632],\n",
       "       [-0.76270929, -0.31874168, -0.27196198,  0.30947122,  0.87200487,\n",
       "        -0.60105042,  0.24760211, -0.68565583],\n",
       "       [-0.8348775 ,  0.38619428, -0.45257766, -0.19015451,  0.99434971,\n",
       "         0.0082224 ,  0.87605771, -0.28638224],\n",
       "       [-0.40400711, -0.7689096 , -0.09600042,  0.95586342, -0.06598517,\n",
       "        -0.93511531,  0.31161634, -0.94289277],\n",
       "       [-0.39658628,  0.95619366, -0.84529541, -0.31177212, -0.99557658,\n",
       "         0.37476923, -0.93195442, -0.44681321],\n",
       "       [-0.9639589 , -0.8175903 ,  0.91542455,  0.77615542,  0.31394815,\n",
       "         0.95950185, -0.07857369, -0.84930187],\n",
       "       [ 0.60937844,  0.27349324,  0.4083768 ,  0.94846395,  0.3103788 ,\n",
       "         0.35963455, -0.32960103,  0.59283227],\n",
       "       [-0.38290982, -0.99518425,  0.94131515, -0.45964301,  0.73569824,\n",
       "        -0.02837254,  0.83754994,  0.21442016]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B =  np.random.uniform(-1, 1, (12, 8))\n",
    "# 生成一个 5×12 的随机整数矩阵（数值范围 0~10）\n",
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "0a566b18-2699-4803-8cbb-cf67866fd0b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(B, cmap = 'RdYlBu_r', square = True, \n",
    "            cbar = False,\n",
    "            linecolor = 'w', linewidths = 0.25)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dfeed245-4e33-4910-9833-2137fd34faa3",
   "metadata": {},
   "source": [
    "## 矩阵乘法 A@B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "7d3b567f-da0f-4c6a-897f-f95eacf02cba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.98797093,  0.66910163, -0.88876459,  1.12118591,  0.69130305,\n",
       "        -0.25055795, -0.06932378,  1.08696502],\n",
       "       [ 1.61749156,  1.31993114, -2.06638394,  0.89880038, -0.60852435,\n",
       "         0.072751  , -1.89227367,  2.23129511],\n",
       "       [-0.07813197, -1.37788175,  0.57851779,  1.23120289, -1.1172428 ,\n",
       "        -2.11212281, -2.4691439 , -0.4314863 ],\n",
       "       [ 0.34710126,  2.04869843, -2.23427683, -1.05088561, -1.11971085,\n",
       "        -0.61067229,  1.68173533,  0.13102407],\n",
       "       [ 0.2644065 ,  0.65919255, -2.46419918, -0.30393328, -1.04122842,\n",
       "         0.96055876,  1.22317478, -1.31792664]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C = A @ B\n",
    "C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "249154c9-d3e6-4b7d-8c07-5df88d0aff1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.23129510882643"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "a0bcbf9c-920a-492b-b5af-0f6d224a9316",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-2.4691438978737184"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "85fe8fe6-0b22-45c8-aecf-666084b060ff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'B')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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tGmlwl9cSkqKfvCDHyShMgAAgMphVQCMRCJaunSpcnJydPnllye7HAAAgKSwKgDu3btXR48eVWZmZrJLAQAASBrHGGOSXURl2bVrly655BL16dNHr732WrLLAQCgSnAcJ9klwCW3sc6qFcD69eurZs2a2rp1a7JLAQAASBqr3gXs9/vVpUsXLVq0SDt27FDjxo2TXRIAAFVCp6HzXLddNvVOSVLkzfs8jeG/7feSpOnrvnDdZ0huE0nS54ePehqraZ2akqRX1Nx1n34qkiSZyJ9d93H8/0uStLJxlofqpBt2bJEkrd55yHWfdpfUdd3WqhVASXr88cdljNGQIUNUXFx8xv2hUEgLFixIQmUAAACVw6oVQEnKz8/X5MmTNXz4cOXk5GjYsGH6zne+o1AopPXr12vatGnKzs7WrbfemuxSAQAAKoR1AVCShgwZory8PD3zzDOaOHGidu7cqWAwqObNm6tv374aMWJEsksEAACoMFYGQEm67rrr9OKLLya7DAAAgEpn3WsAAQAAbEcABAAAsAwBEAAAwDIEQAAAAMsQAAEAACxDAAQAALCMY9xeNRgAAFjJcZxklwCX3MY61/sA8p9fdZDpAQBAeTxtBF38Qm/XbVOG/1GSFFk2ylNB/k7PSJKWbd/vuk+ny9MlScf+7w9c96nxv/8kSYosedBDdZK/67OSpKOhD1z3qRn8riTJhN/1NJYT6CZJOj7xdtd90v7zDU9jAADgxh8373LdtneLhpKknmPf8TTGW0/2kCQdOPGx6z7/kXq1JGleWnNPY915vEiSdCS0wXWfWsFWkqS87jNd91mzeJAkKfLeox6qk/zfnxQbq+vv3Y+15D7XbXkNIADr/O53v5PjOMrOzk52KQCQFARAANaZOTP21/tHH32k1atXJ7kaAKh8BEAAVlm3bp3++c9/qmfPnpKkGTNmJLkiAKh8BEAAVokHvgkTJqhDhw6aM2eOjh49muSqAKByEQABWOPYsWN67bXX1LZtW2VnZ2vQoEE6fPiwXn/99WSXBgCVigAIwBpz587VwYMHNXjwYEnSPffco9q1a/M0MADrEAABWGPGjBmqUaOG+vTpI0mqXbu27r77br333nv6+GP3204AQFVHAARghU8++UQrV65Uz549ZYzRgQMHdODAAd11112STr0zGABsQAAEYIWZM2fKGKO5c+cqPT29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",
      "text/plain": [
       "<Figure size 800x300 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 5, figsize=(8, 3))  \n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(C, cmap='RdYlBu_r', \n",
    "                 linecolor = 'k', linewidths = '0.25',\n",
    "                 vmin = C.min(), vmax = C.max(),\n",
    "                 xticklabels = [], yticklabels = [],\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('C')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "plt.title('=')  # 绘制等号\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[2])\n",
    "ax = sns.heatmap(A, cmap='RdYlBu_r', \n",
    "                 linecolor = 'k', linewidths = '0.25',\n",
    "                 xticklabels = [], yticklabels = [],\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('A')\n",
    "\n",
    "plt.sca(axs[3])\n",
    "plt.title('@')  # 绘制乘号\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[4])\n",
    "ax = sns.heatmap(B, cmap='RdYlBu_r', \n",
    "                 linecolor = 'k', linewidths = '0.25',\n",
    "                 xticklabels = [], yticklabels = [],\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('B')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a47dacd-9157-461b-89bb-7a3d558679fc",
   "metadata": {},
   "source": [
    "## 上下排列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "33879ad6-5f01-437e-af59-aaf51964b0bd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5, 12)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A_shape = A.shape\n",
    "A_shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "c640b314-ac14-4aa8-b4ff-8178c809eb8c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = A_shape[0]\n",
    "m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "290e8b0c-aff0-4904-95f6-b378cddfe755",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 300x800 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(5, 1, figsize=(3, 8))  \n",
    "axs = axs.flatten()\n",
    "\n",
    "for i in range(m):\n",
    "    C_i_row = A[[i],:] @ B\n",
    "\n",
    "    plt.sca(axs[i])\n",
    "    ax = sns.heatmap(C_i_row, cmap='RdYlBu_r', \n",
    "                     linecolor = 'k', linewidths = '0.25',\n",
    "                     vmin = C.min(), vmax = C.max(),\n",
    "                     xticklabels = [], yticklabels = [],\n",
    "                     cbar_kws={\"orientation\": \"horizontal\"})\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title('c_' + str(i + 1) + '_row')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19ea200c-7cd5-4857-bd76-564de35d6934",
   "metadata": {},
   "source": [
    "作者\t**生姜DrGinger**  \n",
    "脚本\t**生姜DrGinger**  \n",
    "视频\t**崔崔CuiCui**  \n",
    "开源资源\t[**GitHub**](https://github.com/Visualize-ML)  \n",
    "平台\t[**油管**](https://www.youtube.com/@DrGinger_Jiang)\t\t\n",
    "\t\t[**iris小课堂**](https://space.bilibili.com/3546865719052873)\t\t\n",
    "\t\t[**生姜DrGinger**](https://space.bilibili.com/513194466)  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
